package com.ruoyi.business.domain.product;

import com.baomidou.mybatisplus.annotation.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.ruoyi.common.core.domain.BaseEntity;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 订单明细表实体类
 * 对应数据库表：tb_order_item
 */
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("tb_order_item")
@ApiModel(value = "TbOrderItem", description = "订单明细表实体类")
public class TbOrderItem extends BaseEntity {

    /**
     * 明细ID
     */
    @ApiModelProperty(value = "明细ID")
    @TableId(value = "id", type = IdType.ASSIGN_ID)
    private Long id;

    /**
     * 订单ID
     */
    @ApiModelProperty(value = "订单ID")
    private Long orderId;

    /**
     * 订单编号（冗余）
     */
    @ApiModelProperty(value = "订单编号（冗余）")
    private String orderNo;

    /**
     * 商品SPU ID
     */
    @ApiModelProperty(value = "商品SPU ID")
    private Long productId;

    /**
     * 商品标题（冗余，避免商品删除后无记录）
     */
    @ApiModelProperty(value = "商品标题（冗余，避免商品删除后无记录）")
    private String productTitle;

    /**
     * SKU ID
     */
    @ApiModelProperty(value = "SKU ID")
    private Long skuId;

    /**
     * SKU编码（冗余）
     */
    @ApiModelProperty(value = "SKU编码（冗余）")
    private String skuCode;

    /**
     * SKU规格（如"黑色 M"，冗余）
     */
    @ApiModelProperty(value = "SKU规格（如\"黑色 M\"，冗余）")
    private String specsText;

    /**
     * 购买数量
     */
    @ApiModelProperty(value = "购买数量")
    private Long quantity;

    /**
     * SKU兑换类型（1-纯积分，2-积分+金额，0-纯金额）
     */
    @ApiModelProperty(value = "SKU兑换类型（1-纯积分，2-积分+金额，0-纯金额）")
    private Integer exchangeType;

    /**
     * 单件固定积分需求（冗余SKU配置）
     */
    @ApiModelProperty(value = "单件固定积分需求（冗余SKU配置）")
    private Long pointsNeeded;

    /**
     * 单件固定金额需求（冗余SKU配置）
     */
    @ApiModelProperty(value = "单件固定金额需求（冗余SKU配置）")
    private BigDecimal cashNeeded;

    /**
     * 该SKU总扣减积分（quantity*points_needed）
     */
    @ApiModelProperty(value = "该SKU总扣减积分（quantity*points_needed）")
    private Long totalPoints;

    /**
     * 该SKU总支付金额（quantity*cash_needed）
     */
    @ApiModelProperty(value = "该SKU总支付金额（quantity*cash_needed）")
    private BigDecimal totalCash;

    /**
     * 扣减的积分库存（quantity）
     */
    @ApiModelProperty(value = "扣减的积分库存（quantity）")
    private Long pointsStockDeduct;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建时间", readOnly = true)
    private Date createTime;

    /**
     * sku条形码
     */
    @ApiModelProperty(value = "sku条形码")
    private String barcode;

    /**
     * 更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新时间", readOnly = true)
    private Date updateTime;

    /**
     * 创建人
     */
    @TableField(fill = FieldFill.INSERT)
    @ApiModelProperty(value = "创建人", readOnly = true)
    private String createBy;

    /**
     * 更新人
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    @ApiModelProperty(value = "更新人", readOnly = true)
    private String updateBy;

    /**
     * 0正常 1已删除
     */
    @ApiModelProperty(value = "0正常 1已删除")
    private Integer isDelete;


    @ApiModelProperty(value = "商品sku信息")
    @TableField(exist = false)
    private TbProductSkus tbProductSku;
}
